Hibernate Validation Framework হল Hibernate ORM-এর একটি শক্তিশালী ফিচার যা Java Bean Validation স্পেসিফিকেশন (JSR 303/JSR 380) অনুসরণ করে। এটি আপনাকে domain objects বা entities এর validation সহজভাবে করতে সহায়তা করে, যাতে নিশ্চিত করা যায় যে ডেটাবেসে প Persist (সংরক্ষণ) করার পূর্বে সমস্ত ইনপুট ডেটা সঠিক এবং valid।
Hibernate Validation-এর মাধ্যমে আপনি সহজে field validation, method validation, এবং cross-field validation করতে পারেন, যা আপনার অ্যাপ্লিকেশনে ডেটার অখণ্ডতা এবং সঠিকতা নিশ্চিত করে।
Hibernate Validation ব্যবহার করতে হলে আপনাকে Hibernate Validator এবং Bean Validation API আপনার প্রজেক্টে অন্তর্ভুক্ত করতে হবে।
Maven এর মাধ্যমে লাইব্রেরি যোগ করার জন্য pom.xml ফাইলে নিচের ডিপেনডেন্সি গুলি যোগ করুন:
<dependencies>
<!-- Hibernate Validator Dependency -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.13.Final</version>
</dependency>
<!-- Bean Validation API Dependency -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<!-- Optional: For Bean Validation implementation -->
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
</dependencies>
Hibernate Validation বিভিন্ন ধরনের annotations সরবরাহ করে যা ফিল্ড এবং মেথডের জন্য ভ্যালিডেশন চালাতে পারে।
প্রধান Validation Annotations:
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.validation.constraints.Min;
import javax.validation.constraints.Email;
@Entity
public class User {
@Id
private int id;
@NotNull(message = "Name cannot be null")
@Size(min = 2, max = 50, message = "Name must be between 2 and 50 characters")
private String name;
@NotNull(message = "Email cannot be null")
@Email(message = "Email should be valid")
private String email;
@Min(value = 18, message = "Age must be at least 18")
private int age;
// Getter and Setter methods
}
এখানে:
Hibernate Validation চালানোর জন্য আপনি Validator অবজেক্ট ব্যবহার করতে পারেন। এটি একটি সেশন তৈরি করে এবং ফিল্ড ভ্যালিডেশন চেক করবে।
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.validation.ConstraintViolation;
import java.util.Set;
public class HibernateValidationExample {
public static void main(String[] args) {
// Create ValidatorFactory and Validator
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
// Create User object with invalid data
User user = new User();
user.setName("J"); // Invalid name (should be 2-50 characters)
user.setEmail("invalidEmail"); // Invalid email
user.setAge(16); // Invalid age (should be at least 18)
// Validate the user object
Set<ConstraintViolation<User>> violations = validator.validate(user);
// Print validation errors
for (ConstraintViolation<User> violation : violations) {
System.out.println("Validation error: " + violation.getMessage());
}
}
}
এখানে:
Set<ConstraintViolation<User>>
অবজেক্টে জমা হয়।Validation error: Name must be between 2 and 50 characters
Validation error: Email should be valid
Validation error: Age must be at least 18
Validation Groups: Hibernate Validation আপনাকে groups ব্যবহার করে নির্দিষ্ট ভ্যালিডেশন প্রয়োগ করতে দেয়। আপনি গ্রুপ দ্বারা ভ্যালিডেশন চালাতে পারেন, যা বিভিন্ন পরিস্থিতির জন্য উপযুক্ত।
@NotNull(groups = Default.class)
@Size(min = 2, max = 50, groups = AdminGroup.class)
private String name;
Custom Constraints: আপনি যদি নিজের কাস্টম ভ্যালিডেশন তৈরি করতে চান, তাহলে constraint annotation তৈরি করতে পারেন। এই ক্ষেত্রে আপনাকে একটি constraint validator তৈরি করতে হবে।
@Constraint(validatedBy = CustomValidator.class)
public @interface ValidEmail {
String message() default "Invalid email";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Method Validation: Hibernate Validation শুধুমাত্র ক্লাস ফিল্ড নয়, method level validationও সাপোর্ট করে। এর জন্য @Validated
অ্যানোটেশন এবং @Valid
ব্যবহার করা যেতে পারে।
public class UserService {
@Validated
public void saveUser(@Valid User user) {
// Save user to the database
}
}
Hibernate Validation Framework হল একটি শক্তিশালী টুল যা ডেটা ভ্যালিডেশন সহজ করে দেয়। Bean Validation স্পেসিফিকেশন অনুসরণ করে এটি field validation, method validation, এবং cross-field validation এর জন্য বিভিন্ন বৈশিষ্ট্য প্রদান করে। Hibernate Validator ফ্রেমওয়ার্ক ব্যবহার করে, আপনি খুব সহজে অ্যাপ্লিকেশনের ভ্যালিডেশন লজিক তৈরি করতে পারেন এবং ডেটাবেসে সঠিক, বৈধ ডেটা নিশ্চিত করতে পারেন।
Hibernate Validator হল Hibernate ফ্রেমওয়ার্কের একটি অংশ যা Bean Validation স্পেসিফিকেশন (JSR 303/JSR 380) অনুসরণ করে। এটি Java অ্যাপ্লিকেশনের ডেটা বৈধতা নিশ্চিত করার জন্য ব্যবহৃত হয়, যাতে আপনার ডোমেইন অবজেক্টগুলি সঠিক এবং স্বচ্ছভাবে কাজ করতে পারে। Hibernate Validator JavaBeans এর প্রোপার্টির মান যাচাই করার জন্য constraint annotations প্রদান করে, যেমন @NotNull
, @Size
, @Min
, @Max
, @Email
, এবং আরও অনেকগুলি।
Hibernate Validator একটি খুব কার্যকরী টুল যা validation logic সরল করে তোলে এবং এটি বিভিন্ন প্রকারের ডেটার জন্য ডেটা ইন্টেগ্রিটি নিশ্চিত করে। Hibernate Validator-কে আপনার প্রোজেক্টে ব্যবহার করলে, আপনি আপনার ডেটার বৈধতা পরীক্ষা এবং কাস্টম validation rules যুক্ত করতে পারেন।
Hibernate Validator আপনাকে annotations ব্যবহার করে অবজেক্টগুলির বৈধতা যাচাই করতে দেয়। এগুলি সাধারণত JavaBean properties বা DTO (Data Transfer Object) ক্লাসগুলির ক্ষেত্রের উপর প্রয়োগ করা হয়।
Hibernate Validator ডেটা মডেল ক্লাসে বা API স্তরে আপনার ডেটার সাথে সম্পর্কিত validation constraints সংজ্ঞায়িত করতে সাহায্য করে, যা server-side validation নিশ্চিত করে।
ধরা যাক, আমাদের একটি Employee ক্লাস রয়েছে এবং আমরা এই ক্লাসের বিভিন্ন প্রপার্টির উপর constraint annotations প্রয়োগ করতে চাই।
Hibernate Validator ব্যবহার করতে হলে আপনাকে Maven প্রকল্পে এটি যুক্ত করতে হবে। Hibernate Validator JSR-303 এর উপর ভিত্তি করে তৈরি, এবং এটি Maven দ্বারা ইন্সটল করা যায়।
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.5.Final</version>
</dependency>
এখন, একটি Employee ক্লাস তৈরি করা হবে এবং এতে কিছু সাধারণ validation constraints প্রয়োগ করা হবে।
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.validation.constraints.Min;
import javax.validation.constraints.Email;
public class Employee {
@NotNull(message = "Name cannot be null")
@Size(min = 2, max = 100, message = "Name must be between 2 and 100 characters")
private String name;
@Min(value = 1, message = "Salary must be greater than or equal to 1")
private double salary;
@Email(message = "Email should be valid")
private String email;
// Getters and Setters
}
এখানে:
@NotNull
: এটি নিশ্চিত করে যে name
ফিল্ডটি null নয়।@Size
: এটি name
ফিল্ডের দৈর্ঘ্য ২ থেকে ১০০ অক্ষরের মধ্যে থাকতে হবে।@Min
: এটি নিশ্চিত করে যে salary
ফিল্ডের মান ১ এর কম হবে না।@Email
: এটি নিশ্চিত করে যে email
ফিল্ডটি একটি বৈধ ইমেইল ঠিকানা হবে।Hibernate Validator ব্যবহার করার জন্য একটি Validator অবজেক্ট তৈরি করতে হবে, যা আপনার Employee ক্লাসের বৈধতা পরীক্ষা করবে।
import org.hibernate.validator.HibernateValidator;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.validation.ConstraintViolation;
import java.util.Set;
public class ValidatorExample {
public static void main(String[] args) {
// Step 1: Create a ValidatorFactory
ValidatorFactory factory = Validation.byProvider(HibernateValidator.class)
.configure()
.buildValidatorFactory();
// Step 2: Create Validator
Validator validator = factory.getValidator();
// Step 3: Create Employee instance
Employee employee = new Employee();
employee.setName("J");
employee.setSalary(0);
employee.setEmail("invalidEmail");
// Step 4: Validate Employee object
Set<ConstraintViolation<Employee>> violations = validator.validate(employee);
// Step 5: Print validation results
for (ConstraintViolation<Employee> violation : violations) {
System.out.println(violation.getMessage());
}
}
}
ValidatorFactory
তৈরি করা হয়।Validator
অবজেক্ট ব্যবহার করে ডেটা যাচাই করা হয়।validator.validate(employee)
ব্যবহার করে ডেটার বৈধতা যাচাই করা হয়।violations
সেটের মধ্যে সমস্ত ত্রুটি বার্তা থাকবে, যা আপনি কনসোলে দেখতে পাবেন।Name must be between 2 and 100 characters
Salary must be greater than or equal to 1
Email should be valid
Hibernate Validator আপনাকে custom validation constraints তৈরি করার সুযোগ দেয়। আপনি annotation তৈরি করে এবং তাদের মধ্যে logic সংজ্ঞায়িত করে কাস্টম ভ্যালিডেটর তৈরি করতে পারেন।
ধরা যাক আমরা একটি কাস্টম ভ্যালিডেশন তৈরি করতে চাই যা সুনির্দিষ্ট একটি নামের ফরম্যাট পরীক্ষা করবে। যেমন, নামের প্রথম অক্ষরটি বড় হতে হবে।
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Constraint(validatedBy = NameValidator.class)
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ValidName {
String message() default "Name must start with an uppercase letter";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class NameValidator implements ConstraintValidator<ValidName, String> {
@Override
public void initialize(ValidName constraintAnnotation) {}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (value == null || value.isEmpty()) {
return true;
}
return Character.isUpperCase(value.charAt(0));
}
}
public class Employee {
@ValidName
private String name;
// Getters, Setters, Constructors
}
এখানে, @ValidName
অ্যানোটেশনটি name
ফিল্ডে প্রয়োগ করা হয়েছে, এবং NameValidator ক্লাসটি এটি যাচাই করবে যে নামের প্রথম অক্ষরটি বড় হাতের হতে হবে।
Hibernate Validator একটি শক্তিশালী টুল যা JavaBeans এবং ডেটা ট্রান্সফার অবজেক্টের জন্য validation সরল করে তোলে। এটি JSR 303/JSR 380 স্পেসিফিকেশন অনুসরণ করে এবং আপনাকে annotations ব্যবহার করে সহজে ডেটার বৈধতা পরীক্ষা করতে সহায়ক। Hibernate Validator আপনাকে predefined validation constraints যেমন @NotNull
, @Email
, @Size
ইত্যাদি ব্যবহার করতে দেয়, এবং আপনি চাইলে custom validation তৈরি করারও সুযোগ পাবেন। এটি server-side validation নিশ্চিত করার জন্য অত্যন্ত উপযোগী এবং ডেটার integrity বজায় রাখতে সহায়ক।
Bean Validation হল Java SE এবং Java EE এর জন্য একটি স্ট্যান্ডার্ড API যা ডেটা ভ্যালিডেশন নিশ্চিত করতে সাহায্য করে। Hibernate এর মাধ্যমে Bean Validation এর ইন্টিগ্রেশন করা যায়, যা Java Bean-এর অবজেক্ট ডেটা ভ্যালিডেশন কার্যকর করে। Hibernate Bean Validation সাধারণত JSR 303 (যা পরে JSR 380 তে আপডেট হয়েছে) ফিচার হিসেবে ব্যবহৃত হয় এবং এটি একে অপরের সাথে ইন্টিগ্রেটেড হতে পারে।
Hibernate এর Bean Validation ইন্টিগ্রেশন সাধারণত Hibernate Validator লাইব্রেরি ব্যবহার করে করা হয়, যা JSR 303 এর একটি বাস্তবায়ন। Hibernate Validator মূলত annotation-based validation সাপোর্ট করে, যা JavaBeans অবজেক্টগুলির জন্য ফিল্ড-ভিত্তিক ডেটা ভ্যালিডেশন প্রদান করে।
Hibernate Validator JavaBeans এ validation constraints প্রয়োগ করে এবং সেই অনুযায়ী validation errors প্রদান করে। উদাহরণস্বরূপ, একটি ফিল্ডে নির্দিষ্ট মান (যেমন একটি ইমেইল ঠিকানা) চেক করা হয়, এবং যদি সেই মানটি সঠিক না হয় তবে তা এরোর হিসাবে ফিরিয়ে দেয়।
Hibernate Bean Validationে Annotations (যেমন @NotNull
, @Email
, @Min
, @Max
, @Size
ইত্যাদি) ব্যবহার করে বিভিন্ন ডেটা ভ্যালিডেশন করা হয়।
@NotNull
: ক্ষেত্রটি খালি থাকতে পারবে না।@Size
: স্ট্রিং, এরে বা কালেকশনের আকারের জন্য একটি রেঞ্জ নির্ধারণ করে।@Email
: একটি বৈধ ইমেইল ঠিকানা নিশ্চিত করতে ব্যবহার করা হয়।@Min
/ @Max
: একটি মানের সর্বনিম্ন বা সর্বোচ্চ সীমা নির্ধারণ করে।@Pattern
: একটি রেগুলার এক্সপ্রেশন দিয়ে একটি ফিল্ডের মান চেক করা হয়।@Past
/ @Future
: তারিখের জন্য, যাতে এটি অতীত বা ভবিষ্যত হতে হবে।Hibernate Validator ব্যবহার করার জন্য আপনাকে প্রথমে Hibernate Validator লাইব্রেরি পোমে অন্তর্ভুক্ত করতে হবে।
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.13.Final</version> <!-- Use latest version -->
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>javax.validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
</dependencies>
এখানে, Hibernate Validator এবং javax.validation-api লাইব্রেরি দুটি নির্ধারণ করা হয়েছে।
এখন, Hibernate Bean Validation এবং JSR 303/JSR 380 এর ব্যবহার দেখবো।
import javax.validation.constraints.*;
import javax.validation.Valid;
public class Employee {
@NotNull(message = "ID cannot be null")
private Integer id;
@NotNull(message = "Name cannot be null")
@Size(min = 3, max = 100, message = "Name must be between 3 and 100 characters")
private String name;
@Email(message = "Invalid email address")
private String email;
@Min(value = 1000, message = "Salary must be greater than or equal to 1000")
@Max(value = 50000, message = "Salary must be less than or equal to 50000")
private Double salary;
// Getters and Setters
}
এখানে:
@NotNull
, @Size
, @Email
, @Min
, এবং @Max
দ্বারা বিভিন্ন প্রকার ভ্যালিডেশন করা হয়েছে।Hibernate Validator ব্যবহার করে Bean Validation করার জন্য আপনি ValidatorFactory এবং Validator ক্লাস ব্যবহার করতে পারেন। এটি আপনার JavaBean অবজেক্টের ডেটা ভ্যালিডেশন চালাবে।
import javax.validation.*;
import java.util.Set;
public class EmployeeValidationTest {
public static void main(String[] args) {
// Create an Employee object with invalid data
Employee employee = new Employee();
employee.setId(null); // Invalid
employee.setName("Jo"); // Invalid, Name should be at least 3 characters
employee.setEmail("invalid-email"); // Invalid email
employee.setSalary(150000.0); // Invalid, Salary exceeds max limit
// Get ValidatorFactory and Validator instances
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
// Perform validation
Set<ConstraintViolation<Employee>> violations = validator.validate(employee);
// Print validation errors
for (ConstraintViolation<Employee> violation : violations) {
System.out.println(violation.getPropertyPath() + " " + violation.getMessage());
}
}
}
id must not be null
name Name must be between 3 and 100 characters
email Invalid email address
salary Salary must be less than or equal to 50000
এই উদাহরণে, Employee
অবজেক্টের ডেটা ভ্যালিডেশন করা হয়েছে এবং সেখানে বিভিন্ন ত্রুটি (invalid data) পাওয়া গেছে। Hibernate Validator এবং Bean Validation ক্লাসগুলি ব্যবহার করে, আপনি সহজেই ডেটা ভ্যালিডেশন চেক করতে পারেন।
Hibernate Bean Validation এবং Hibernate Validator এর ইন্টিগ্রেশন ডেটা ভ্যালিডেশনে একটি শক্তিশালী সরঞ্জাম সরবরাহ করে। Annotations এর মাধ্যমে সহজেই JavaBeans অবজেক্টের ডেটা ভ্যালিডেশন করা যায়, যা ডেটাবেসে ইনসার্ট করার আগে সঠিকতা নিশ্চিত করে। Hibernate Validator আপনাকে custom validation এবং runtime validation এর সুবিধা প্রদান করে, যা কোডের মান উন্নত করে এবং ডেটার সঠিকতা নিশ্চিত করে।
Hibernate Validator হলো JSR-303 এবং JSR-380 স্পেসিফিকেশন অনুসারে একটি কনস্ট্রেইন্ট অ্যানোটেশন লাইব্রেরি, যা JPA (Java Persistence API) এ ভ্যালিডেশন প্রয়োগ করতে সাহায্য করে। এটি ডেটা ইনপুটের উপর বৈধতা চেক করার জন্য ব্যবহৃত হয়, যেমন নামের আকার, ইমেল ঠিকানা, অথবা কোনো ক্ষেত্র খালি না হওয়া ইত্যাদি। Hibernate Validator সাধারণত অ্যানোটেশন ভিত্তিক ভ্যালিডেশন মেথডগুলো সরবরাহ করে, যা সহজে ক্লাসে প্রয়োগ করা যায়।
Hibernate Validator @NotNull, @Size, @Email, এবং Custom Validation এর মতো অ্যানোটেশন ব্যবহার করে ইনপুট ডেটা যাচাই করা যায়।
@NotNull
@NotNull
অ্যানোটেশনটি ব্যবহার করে কোনো ক্ষেত্রের মান null হতে পারবেনা, অর্থাৎ এটি একটি বাধ্যতামূলক ফিল্ড তৈরি করে।
@NotNull
:import javax.validation.constraints.NotNull;
public class User {
@NotNull(message = "Username cannot be null")
private String username;
// Getters and Setters
}
এখানে, @NotNull
ব্যবহার করা হয়েছে username
ফিল্ডে, যাতে এই ফিল্ডের মান null না হয়। যদি username
ফিল্ডের মান null হয়, তাহলে এটি একটি ভ্যালিডেশন এরর তৈরি করবে।
@Size
@Size
অ্যানোটেশনটি একটি ফিল্ডের স্ট্রিং বা коллекশনের আকার যাচাই করতে ব্যবহৃত হয়। এটি ডেটার মিনিমাম এবং ম্যাক্সিমাম আকার নির্ধারণ করতে সহায়তা করে।
@Size
:import javax.validation.constraints.Size;
public class User {
@Size(min = 3, max = 20, message = "Username must be between 3 and 20 characters")
private String username;
// Getters and Setters
}
এখানে, @Size
অ্যানোটেশনটি username
ফিল্ডের জন্য প্রযোজ্য। এটি নিশ্চিত করে যে username
ফিল্ডের আকার ৩ থেকে ২০ ক্যারেক্টারের মধ্যে হতে হবে। যদি এর মান ৩ এর কম বা ২০ এর বেশি হয়, তাহলে এটি একটি ভ্যালিডেশন এরর তৈরি করবে।
@Email
@Email
অ্যানোটেশনটি একটি বৈধ ইমেল ঠিকানা যাচাই করার জন্য ব্যবহৃত হয়। এটি নিশ্চিত করে যে একটি ফিল্ডে যে ডেটা রয়েছে তা একটি সঠিক ইমেল ফরম্যাটে আছে।
@Email
:import javax.validation.constraints.Email;
public class User {
@Email(message = "Please provide a valid email address")
private String email;
// Getters and Setters
}
এখানে, @Email
অ্যানোটেশনটি email
ফিল্ডে ব্যবহার করা হয়েছে। এটি নিশ্চিত করে যে, email
ফিল্ডের মান একটি বৈধ ইমেল ঠিকানা, যেমন user@example.com
।
Hibernate Validator এর সাহায্যে আপনি custom validation তৈরি করতে পারেন, যেখানে একটি নিজস্ব কনস্ট্রেইন্ট অ্যানোটেশন এবং কাস্টম ভ্যালিডেটর ক্লাস তৈরি করতে হবে। এটি খুবই উপকারী যখন পূর্বনির্ধারিত অ্যানোটেশনগুলির বাইরে কিছু ভ্যালিডেশন প্রয়োজন হয়।
প্রথমে একটি কাস্টম অ্যানোটেশন তৈরি করতে হবে যা আপনার কাস্টম ভ্যালিডেশন ব্যবহার করবে।
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
// Define the annotation
@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = PhoneNumberValidator.class) // Reference to the custom validator
public @interface ValidPhoneNumber {
String message() default "Invalid phone number";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
এখানে, @ValidPhoneNumber
একটি কাস্টম অ্যানোটেশন যা PhoneNumberValidator
নামক কাস্টম ভ্যালিডেটর দ্বারা যাচাই হবে।
এখন, আপনি একটি কাস্টম ভ্যালিডেটর ক্লাস তৈরি করবেন যা অ্যানোটেশন দ্বারা নির্ধারিত ফিল্ডের মান যাচাই করবে।
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class PhoneNumberValidator implements ConstraintValidator<ValidPhoneNumber, String> {
@Override
public void initialize(ValidPhoneNumber constraintAnnotation) {
// No initialization required
}
@Override
public boolean isValid(String phoneNumber, ConstraintValidatorContext context) {
if (phoneNumber == null) {
return false; // Phone number cannot be null
}
// Check if phone number matches a basic pattern (simple example)
return phoneNumber.matches("^\\+?[0-9]*$"); // Validates phone numbers with digits and optional "+" sign
}
}
এখানে, PhoneNumberValidator
ক্লাসে isValid()
মেথডে একটি সিম্পল প্যাটার্ন মেচিং দিয়ে ফোন নাম্বারের বৈধতা যাচাই করা হয়েছে।
এখন, আপনি আপনার Entity ক্লাসে এই কাস্টম ভ্যালিডেশন অ্যানোটেশন ব্যবহার করতে পারেন।
import javax.validation.constraints.NotNull;
public class User {
@NotNull(message = "Phone number cannot be null")
@ValidPhoneNumber(message = "Invalid phone number format")
private String phoneNumber;
// Getters and Setters
}
এখানে, @ValidPhoneNumber
অ্যানোটেশনটি phoneNumber
ফিল্ডে ব্যবহৃত হয়েছে এবং এটি কাস্টম ভ্যালিডেটর PhoneNumberValidator
দ্বারা যাচাই করা হবে।
Hibernate Validator ব্যবহার করার জন্য আপনি ValidatorFactory
এবং Validator
ব্যবহার করবেন, যা আপনার Entity ক্লাসের ইনপুট ভ্যালিডেশন করবে।
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
public class ValidationTest {
public static void main(String[] args) {
// Create a validator
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
// Create a User object with invalid phone number
User user = new User();
user.setPhoneNumber("123ABC");
// Validate the user object
Set<ConstraintViolation<User>> violations = validator.validate(user);
// Print any validation errors
for (ConstraintViolation<User> violation : violations) {
System.out.println(violation.getMessage());
}
}
}
এখানে, user.setPhoneNumber("123ABC")
দ্বারা একটি অবৈধ ফোন নাম্বার সেট করা হয়েছে, এবং validator.validate(user)
এর মাধ্যমে সেই অবজেক্টটির ভ্যালিডেশন করা হচ্ছে। যদি কোনো ত্রুটি থাকে, তবে তা কনসোলে দেখানো হবে।
Hibernate Validator ব্যবহার করে আপনি @NotNull
, @Size
, @Email
, এবং Custom Validation এর মতো অ্যানোটেশন দ্বারা ইনপুট ডেটার বৈধতা চেক করতে পারেন।
@NotNull
চেক করে যে ফিল্ডটি null নয়।@Size
নিশ্চিত করে যে স্ট্রিং বা কালেকশনের আকার নির্দিষ্ট সীমার মধ্যে রয়েছে।@Email
ইমেল ফরম্যাট সঠিক কিনা যাচাই করে।Hibernate Validator আপনার জাভা অ্যাপ্লিকেশনগুলির ইনপুট ডেটা যাচাই করার জন্য একটি শক্তিশালী এবং নমনীয় পদ্ধতি প্রদান করে।
Hibernate-এ Validation Errors এবং Exception Handling হল দুটি অত্যন্ত গুরুত্বপূর্ণ বিষয় যা ডেটাবেস অপারেশন করার সময় অ্যাপ্লিকেশনের স্থিতিশীলতা এবং সঠিকতা নিশ্চিত করে। Hibernate ডেটাবেসের সাথে যোগাযোগ করার সময় নানা ধরনের validation errors এবং exceptions ছুঁড়ে দিতে পারে, যেমন constraint violations (যেমন, unique constraint violation বা foreign key constraint violation) বা mapping errors।
এখানে Hibernate-এ validation errors এবং exception handling এর বিভিন্ন দিক আলোচনা করা হলো।
Hibernate Validation সাধারণত JPA Bean Validation (JSR 303/380) ব্যবহার করে, যা annotations এর মাধ্যমে মডেল অবজেক্টের জন্য ইনপুট ডেটা চেক করে। Hibernate Validator একটি কার্যকরী উপায় যা নিশ্চিত করে যে ডেটা ডাটাবেসে সন্নিবেশ বা আপডেট করার আগে সঠিকভাবে যাচাই করা হয়েছে।
null
নয়।import javax.persistence.Entity;
import javax.persistence.Id;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
@Entity
public class Employee {
@Id
private int id;
@NotNull(message = "Name cannot be null")
@Size(min = 2, max = 50, message = "Name must be between 2 and 50 characters")
private String name;
@Email(message = "Email should be valid")
private String email;
// Getters and Setters
}
@NotNull
: নিশ্চিত করে যে name
ফিল্ড null
হবে না।@Size
: name
ফিল্ডের আকার ২ থেকে ৫০ অক্ষরের মধ্যে হবে।@Email
: email
ফিল্ডের মান বৈধ ইমেল ফরম্যাটে থাকতে হবে।Hibernate Validator ডেটা যাচাই করার জন্য Validator
অবজেক্ট ব্যবহার করা হয়।
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.validation.ConstraintViolation;
public class ValidatorExample {
public static void main(String[] args) {
Employee employee = new Employee();
employee.setName("John");
employee.setEmail("invalid-email");
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
// Validating the employee object
Set<ConstraintViolation<Employee>> violations = validator.validate(employee);
for (ConstraintViolation<Employee> violation : violations) {
System.out.println("Validation error: " + violation.getMessage());
}
}
}
validator.validate(employee)
: এই কোডে employee
অবজেক্টটি যাচাই করা হয় এবং যদি কোনো validation error থাকে, তা কনসোলের মাধ্যমে প্রদর্শিত হয়।Hibernate-এ Exception Handling অত্যন্ত গুরুত্বপূর্ণ, কারণ ডেটাবেস অপারেশন চলাকালীন নানা ধরনের exception হতে পারে। Hibernate এর মাধ্যমে বিভিন্ন ধরণের checked এবং unchecked exceptions হতে পারে, যেমন:
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.exception.ConstraintViolationException;
public class EmployeeService {
public void addEmployee() {
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
Session session = factory.getCurrentSession();
try {
// Step 1: Create a new Employee
Employee employee = new Employee();
employee.setName("John");
employee.setEmail("john.doe@example.com");
// Start a transaction
session.beginTransaction();
// Save the employee object
session.save(employee);
// Commit the transaction
session.getTransaction().commit();
} catch (ConstraintViolationException e) {
// Handling constraint violation exceptions (e.g., unique constraint violation)
System.out.println("Constraint Violation: " + e.getMessage());
} catch (Exception e) {
// General exception handling
e.printStackTrace();
} finally {
factory.close();
}
}
}
ConstraintViolationException
: এটি ব্যবহার করে আপনি কনস্ট্রেন্ট ভায়োলেট হওয়ার সময় বিশেষভাবে এক্সসেপশন হ্যান্ডলিং করতে পারবেন। উদাহরণস্বরূপ, যদি ডেটা ইনসার্ট করার সময় একটি ইউনিক কনস্ট্রেন্ট ভেঙে যায়, তবে এই এক্সসেপশনটি ঘটে।Exception
ক্লাস ব্যবহার করতে পারেন।ConstraintViolationException
:unique
বা foreign key
) ভঙ্গ হয়।LazyInitializationException
:EAGER
ফেচিং ব্যবহার করা উচিত।ObjectNotFoundException
:Hibernate-এ Validation Errors এবং Exception Handling খুবই গুরুত্বপূর্ণ অংশ। ডেটাবেস অপারেশনগুলো সফলভাবে পরিচালিত হওয়ার জন্য এবং অ্যাপ্লিকেশনের সঠিকতা বজায় রাখার জন্য আপনাকে সঠিকভাবে validation এবং exception handling করতে হবে। Hibernate এর Validation অ্যানোটেশন ব্যবহার করে ডেটা যাচাই করা যায়, এবং exceptions সঠিকভাবে হ্যান্ডল করলে অ্যাপ্লিকেশন স্টেবল এবং রিলায়েবল হয়।
try-catch
ব্লকের মাধ্যমে, যাতে ডেটাবেসের ত্রুটি সঠিকভাবে হ্যান্ডল করা যায় এবং ব্যবহারকারীকে সঠিক বার্তা প্রদান করা যায়।Read more